#include <iostream>
#include <stdio.h>

#include <iostream>
#include <vector>

class Solution {
private:
    std::vector<std::vector<int>> result; // 存放符合条件结果的集合
    std::vector<int> path; // 用来存放符合条件结果
    void backtracking(int n, int k, int startIndex) {
        if (path.size() == k) {
            result.push_back(path);
            return;
        }
        for (int i = startIndex; i <= n; i++) {
            path.push_back(i); // 处理节点 
            backtracking(n, k, i + 1); // 递归
            path.pop_back(); // 回溯，撤销处理的节点
        }
    }
public:
    std::vector<std::vector<int>> combine(int n, int k) {
        result.clear(); // 可以不写
        path.clear();   // 可以不写
        backtracking(n, k, 1);
        return result;
    }
};

int main(int argv, char**argc)
{

    printf("************  test hello zc!!!   **************\n");
    /* add test code! */
    Solution solve;
    std::vector<std::vector<int>> ret;
    ret = solve.combine(4,2);
    printf("[ \n");
    for(auto p:ret){
        
        // for(auto q:p){
            printf("[%d, %d], \n", p[0], p[1]);
        // }
        
    }
    printf("]\n");
    return 0;
}
